package com.yuandian.customer.perception.service;

import com.yuandian.api.customer_perception.po.*;
import com.yuandian.bpm.common.core.util.R;
import com.yuandian.utils.PageDataInfo;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.text.ParseException;

/**
 * 说明：业务告警service接口
 * @Author yanjun
 * @Date 2021/3/30 9:22
 */
public interface IBusinessAlarmService {

    /**
     * 查询告警类型比例
     * @param params 业务告警请求对象
     * @return 通用返回对象
     */
    R<Object> queryAlarmTypeProportion(BusinessAlarmParams params);

    /**
     * 查询告警类型数top
     * @param params 业务告警请求对象
     * @return 通用返回对象
     */
    R<Object> queryAlarmTypeCountTop(BusinessAlarmParams params);

    /**
     * 查询告警区域topN
     *
     * @param params 业务告警请求对象
     * @return 通用返回对象
     */
    R<Object> queryInfluenceAreaTop (BusinessAlarmParams params);

    /**
     * 查询影响业务最多的故障top
     * @param params 业务告警请求对象
     * @return 通用返回对象
     */
    R<Object> queryInfluenceBusiTop(BusinessAlarmParams params);

    /**
     * 查询影响系统最多的告警 top
     *
      * @param params 业务告警请求对象
     * @return 通用返回对象
     */
    R<Object> queryInfluenceSysTop (BusinessAlarmParams params);


    /**
     * 查询发生次数最多的故障top
     * @param params 业务告警请求对象
     * @return 通用返回对象
     */
    R<Object> queryHappenCountAlarmTop(BusinessAlarmParams params);

    /**
     * 查询告警统计列表
     * @param params 业务告警请求对象
     * @return 通用返回对象
     */
    R<Object> queryAlarmStatisticsList(BusinessAlarmParams params);

    /**
     * 查询告警详情列表
     * @param params 业务告警请求对象
     * @return 通用返回对象
     */
    R<PageDataInfo> queryAlarmDetailList(BusinessAlarmParams params);

    /**
     * 查询系统告警总览列表
     *
     * @param params 系统告警总览请求对象
     * @return 通通用返回对象
     */
    R<Object> querySystemAlarmOverviewList (AlarmOverviewParams params);

    /**
     * 查看告警周期柱状图
     *
     * @param params 请求参数
     * @return 通用返回对象
     */
    R<Object> queryHistogramDetail (HistoGramParams params);

    /**
     * 查询用户告警列表
     *
     * @param params 请求参数
     * @return 通用返回对象
     */
    R<Object> queryUserAlarmList (UserIdentifyAlarmParams params);

    /**
     * 查询告警详情列表和分布
     *
     * @param params 告警参数
     * @return 通用返回对象
     */
    R<Object> queryAlarmDistribution (AlarmDistributionParams params);

    /**
     * 查询告警详情列表和分布
     *
     * @param params 告警参数
     * @return 通用返回对象
     */
    R<Object> queryReturnCodeDetail (AlarmDistributionParams params);


    /**
     * 查询告警级别
     *
     * @return 通用返回对象
     */
    R<Object> queryAlarmLevelList ();

    /**
     * 系统业务告警列表
     * @param params
     * @return
     */
    R<Object> alarmSysAndBusiList(AlarmSysAndBusiParams params);

    /**
     * 系统业务告警列表导出
     * @param params
     */
    void alarmSysAndBusiListExport(AlarmSysAndBusiParams params, HttpServletResponse response) throws IOException;

    /**
     * 告警实值统计列表
     * @param params
     * @return
     */
    R<Object> alarmOverviewList(AlarmSysAndBusiParams params);

    /**
     * 告警总览列表导出
     * @param params
     */
    void alarmOverviewListExport(AlarmSysAndBusiParams params, HttpServletResponse response) throws ParseException, IOException;
}
